/**
 * 
 */
package ua.lviv.franko.mlsFunctions.twoDimension.weightFunctions;

import ua.lviv.franko.mlsFunctions.twoDimension.Particle;

/**
 * @author marko
 * 
 */
public interface IWeightFunction2D {
	/**
	 * 
	 * @param x1
	 *            x value of point in which you want to calculate the function;
	 * @param y1
	 *            y value of point in which you want to calculate the function;
	 * @param rho
	 * @return return a value of weight function in point (x,y)
	 */
	public double calculate(double x, double y, double xi, double yi, double rho);

	/**
	 * 
	 * @param x1
	 *            x value of point in which you want to calculate the function;
	 * @param y1
	 *            y value of point in which you want to calculate the function;
	 * @return return a value of x-partial-dericaty of weight function in point
	 *         (x,y)
	 */
	public double calculateDerivatyX(double x, double y, double xi, double yi, double rho);

	/**
	 * 
	 * @param x1
	 *            x value of point in which you want to calculate the function;
	 * @param y1
	 *            y value of point in which you want to calculate the function;
	 * @return return a value of y-partial-derivaty of weight function in point
	 *         (x,y)
	 */
	public double calculateDerivatyY(double x, double y, double xi, double yi, double rho);

	/**
	 * 
	 * @param p1
	 *            first particle
	 * @param p2
	 *            second particle
	 * @return true if supports of particles have a common piece of support;
	 */
	public boolean intersectedSupport(Particle p1, Particle p2);

}
